//
//  basic_inheritance.hpp
//  learnC++
//
//  Created by liuzhibing on 2018/6/11.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#ifndef basic_inheritance_hpp
#define basic_inheritance_hpp

#include <stdio.h>
#include <iostream>
#include <string>

class Person {
    
public:
    
    std::string m_name;
    int m_age;
    
    Person(std::string name = "",int age = 0):m_name(name),m_age(age){
        
    }
    
    std::string getName(){return  m_name;}
    int getAge(){return m_age;};
    
};

class BaseballPlayer:public Person {
    
public:
    
    double m_battingAverage;
    int m_homeRuns;
    
    BaseballPlayer(int batting = 0,int homeRuns = 0):m_battingAverage(batting),m_homeRuns(homeRuns){
        
    }
    
    void printSelf(){
        std::cout << m_name << m_age << m_homeRuns << m_battingAverage;
    }
    
    
};


//C ++分阶段构造派生类，从最基类的类（继承树的顶部）开始，最后以最小子类（在继承树的底部）结束。 随着每个类的构造，将调用该类的相应构造函数来初始化该类的该部分。

class BaseballPlayerSon:public BaseballPlayer {
    
    
public:
//    父类有一个显式的构造函数，因此编译器不会向其添加隐式的“空”构造函数。 另外你的构造函数有一个参数，所以编译器不能生成对它的隐式调用。 这就是为什么你必须明确地做到这一点。
    BaseballPlayerSon(){
        
    }
    
};
//
//BaseballPlayer b(10,20);
//
//testPerson(b);
void testPerson(Person p);

#endif /* basic_inheritance_hpp */
